import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
Vue.use(Vuex)

export default new Vuex.Store({
  // 1. 存储数据
  state: {
    token: '',
    list: [],
  },
  // 2. 计算属性
  getters: {},
  // 3. 同步逻辑函数 （相当于组件内部的 methods）
  mutations: {
    set_token(state, data) {
      state.token = data
      console.log('vuex中接收到的参数:', data)
    },
    set_list(state, item) {
      state.list.push(item)
    },
    // 初始化请求数据
    init_list(state, list) {
      state.list = list
    },
  },
  // 4. 异步逻辑函数 （相当于组件内部的 异步的 methods ）
  // actions:注意，在actions中获取到的数据，必须通过commit提交给mutaions处理，也就是，actions只负责处理异步，但是不负责处理逻辑，处理逻辑的事都交给mutaions
  // 总结如下：
  // actions负责处理异步
  // actions处理完异步的结果，最终还是要给mutaions
  // commit 对应的就是vuex中mutaions中的函数
  actions: {
    async getLogin({ commit }, data) {
      try {
        const res = await axios.post('/api/login', data)
        if (res.data.code === 0) {
          commit('set_token', res.data.data.token)
          return { code: 0, msg: '登陆成功' }
        } else {
          return { code: -1, msg: '账号密码错误' }
        }
      } catch (err) {
        return { code: -1, msg: err.message }
      }
    },
    // 购物车接口
    async getCartList({ commit }, params) {
      try {
        const res = await axios.get('/api/cart', { params })
        if (res.data.code === 0) {
          commit('init_list', {
            list: res.data.data.list,
            total: res.data.data.total,
          })
          return { code: 0, msg: 'success' }
        } else {
          return { code: -1, msg: 'fail' }
        }
      } catch (err) {}
    },
  },
  // 5. 模块（就是当vuex的代码过多的时候，拆分vuex）
  modules: {},
})
